// #ifndef __tenacitas_time__monthly_recurrence__h__
// #define __tenacitas_time__monthly_recurrence__h__


// // -----------------------------------------------------------------------------
// //                                   C++ headers
// // -----------------------------------------------------------------------------

// // -----------------------------------------------------------------------------
// //                                   3rds headers
// // -----------------------------------------------------------------------------

// // -----------------------------------------------------------------------------
// //                                   our headers
// // -----------------------------------------------------------------------------
// #include "recurrence.h"
// #include "algorithm.h"

// // -----------------------------------------------------------------------------
// //                                   namespaces
// // -----------------------------------------------------------------------------
// using namespace std;

// // -----------------------------------------------------------------------------
// //                                   macro constants
// // -----------------------------------------------------------------------------

// * @def <MACRO-CONTANT-NAME>
// /** 

// // -----------------------------------------------------------------------------
// //                                   macro commands
// // -----------------------------------------------------------------------------

// * @def <MACRO-COMMAND-NAME>
// /** 

// // -----------------------------------------------------------------------------
// //                                   typedefs
// // -----------------------------------------------------------------------------

// * @typedef 
// /** 



// /** namespace of the organization 
// namespace tenacitas {


//     // ---------------------------------------------------------------------
//     //                           pre-declarations
//     // ---------------------------------------------------------------------
	
	
//     // ---------------------------------------------------------------------
//     //                          typedefs
//     // ---------------------------------------------------------------------


//     * @class monthly_recurrence
//     /** Base class for recurrences monthly based
//     *
//     * The @p t_time defines the type of time that is used in the
//     * recurrence. Typically, it is tenacitas::date.
//     *
//     * The @p t_criteria_type defines the criteria used to determine if a
//     * @p t_time object will be allowed to take part of the recurrence
//     *
//     * @note Please, read the tenacitas::recurrence documentation for
//     * further details
//     template <typename t_time, typename t_criteria_type>
//     class monthly_recurrence :
// 	public recurrence <t_time, 
// 			   typename t_time::month_type,
// 			   t_criteria_type > {

//     public:
// 	// -----------------------------------------------------------------
// 	// monthly_recurrence  public constructors
// 	// -----------------------------------------------------------------

// 	monthly_recurrence ( ) : recurrence <t_time, 
// 					     typename t_time::month_type,
// 					     t_criteria_type > ( ) {} 

// 	virtual ~monthly_recurrence ( ) {}

// 	// -----------------------------------------------------------------
// 	// monthly_recurrence  public processors
// 	// -----------------------------------------------------------------

// 	list <t_time> generate ( const t_time & first,
// 				 uint16_t max_periods,
// 				 int8_t shift_value,
// 				 const t_criteria_type & criteria,
// 				 const list<t_time> & but_not_on =
// 				 list<t_time> ( ) ) {
		
// 	    return recurrence <t_time,
// 		typename t_time::month_type,
// 		t_criteria_type>::
// 		generate ( first, max_periods, shift_value,
// 			   criteria, but_not_on) ;  
// 	}
//     };

// }



// #endif


// // 	* @typedef monthly_by_day_date_recurrence
// // 	*
// // 	* @copydoc tenacitas::recurrence
// // 	*
// // 	/** Class that defines an algorithm to calculate
// // 	* the last day of a month, and another algorithm that
// // 	* defines how to shift from months in a date
// // 	typedef monthly_date_recurrence <day_criteria<date,
// // 						      simple_time_creator<date> > 
// // 	monthly_by_day_date_recurrence;

	
	

// * @typedef 
// /** 
// // 	recurrence <shift_months,
// // 			  date,
// // 			  weekday_pattern>

// // 	monthly_by_weekday_date_recurrence;

// * @typedef 
// /** 
// // 	recurrence <shift_months,
// // 			  date_hour,
// // 			  day_hour_pattern>
// // 	monthly_by_day_hour_date_hour_recurrence;

// * @typedef 
// /** 
// // 	recurrence <shift_months,
// // 			  date_hour,
// // 			  weekday_hour_pattern>

// // 	monthly_by_weekday_hour_date_hour_recurrence;
	
